package ecom.stateless;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Properties;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.ow2.util.log.Log;
import org.ow2.util.log.LogFactory;

import ecom.api.IAnnonceChercheurRemote;
import ecom.entity.AnnonceChercheurEntity;
import ecom.entity.ChercheurEntity;
import ecom.entity.ProprietaireEntity;

@Stateless(mappedName = "ecom.stateless.AnnonceChercheurStateless@Remote", description = "Annonce Chercheur stateless", name = "AnnonceChercheurStateless")
public class AnnonceChercheurStateless implements IAnnonceChercheurRemote {

	private Log logger = LogFactory.getLog(AnnonceChercheurStateless.class);

	public AnnonceChercheurEntity myannonce;

	@PersistenceContext
	private EntityManager m_EntityManager = null;

	public void setMyannonce(AnnonceChercheurEntity annonce) {
		this.myannonce = annonce;
	}

	public AnnonceChercheurEntity getMyannonce() {
		return this.myannonce;
	}

	public AnnonceChercheurEntity CreateAnnonceChercheur(
			ChercheurEntity utilisateur, String titre, String texte,
			String ville, int departement, String photo) {
		myannonce = new AnnonceChercheurEntity(utilisateur, titre, texte,
				ville, departement, photo);
		m_EntityManager.persist(myannonce);

		// on apelle le load balancer des prestatatires
		String mail = utilisateur.getMail();
		String urlString = new String();

		

			try {
				// Open the file 

				Properties props = new Properties();
				URL urlProper = ClassLoader.getSystemResource("conf.properties");
				urlString = "";
				try {
					props.load(urlProper.openStream());
					urlString =  props.getProperty("urlFournisseur");
				} catch (IOException e) {
					e.printStackTrace();
				}
				

		
			URL url = new URL(urlString);
			URLConnection conn = url.openConnection();
			System.out.println("ok");

			conn.setDoOutput(true);
			OutputStreamWriter out = new OutputStreamWriter(
					conn.getOutputStream());
			out.write(mail + " " + titre);
			out.close();

			BufferedReader in = new BufferedReader(new InputStreamReader(
					conn.getInputStream()));
			in.close();

			logger.info("servlet prestataire called o k");
		} catch (Exception e) {
			logger.error(e.toString());
		}
		logger.info("FIN Appel servlet");

		return myannonce;

	}

	public AnnonceChercheurEntity SaveAnnonceChercheur(
			AnnonceChercheurEntity myannonce) {
		m_EntityManager.merge(myannonce);
		return myannonce;
	}

	public AnnonceChercheurEntity ModifAnnonceChercheur(long id, String titre,
			String texte, String ville, int departement, String photo) {
		myannonce = m_EntityManager.find(AnnonceChercheurEntity.class, id);
		myannonce.setTitre(titre);
		myannonce.setTexte(texte);
		myannonce.setDepartement(departement);
		myannonce.setVille(ville);
		myannonce.setPhoto(photo);
		m_EntityManager.merge(myannonce);
		return myannonce;
	}

	public AnnonceChercheurEntity ActivateAnnonceChercheur(long id) {
		myannonce = m_EntityManager.find(AnnonceChercheurEntity.class, id);
		if (myannonce.getActive()) {
			myannonce.setActive(false);
		} else {
			myannonce.setActive(true);
		}
		m_EntityManager.merge(myannonce);
		return myannonce;
	}

	public void DeleteAnnonceChercheur(long id) {
		myannonce = new AnnonceChercheurEntity();
		myannonce.setId(id);
		AnnonceChercheurEntity tmp = m_EntityManager.merge(myannonce);
		m_EntityManager.remove(tmp);
	}

	public List<AnnonceChercheurEntity> FindAnnoncesChercheur() {
		return m_EntityManager
				.createQuery(
						"select t from AnnonceChercheurEntity t where t.annonceentity.active=true")
				.getResultList();
	}

	public List<AnnonceChercheurEntity> FindAnnoncesChercheur(int departement) {
		return m_EntityManager
				.createQuery(
						"SELECT OBJECT(t) FROM AnnonceChercheurEntity AS t WHERE t.annonceentity.ville='"
								+ departement + "'").getResultList();
	}

	public List<AnnonceChercheurEntity> FindAnnoncesChercheur(long id) {
		return m_EntityManager.createQuery(
				"SELECT OBJECT(t) FROM AnnonceChercheurEntity AS t WHERE t.id='"
						+ id + "'").getResultList();
	}

	public List<AnnonceChercheurEntity> FindMesAnnoncesChercheur(
			ChercheurEntity MonUtilisateur) {
		return m_EntityManager.createQuery(
				"SELECT OBJECT(t) FROM AnnonceChercheurEntity AS t WHERE t.Chercheur_ID='"
						+ MonUtilisateur.getId() + "'").getResultList();
	}

	public List<ProprietaireEntity> findMesFans(long id) {
		return m_EntityManager
				.createQuery(
						"SELECT p FROM AnnonceChercheurEntity c JOIN c.proprietaireEntityAC p WHERE c.id = "
								+ id).getResultList();
	}

	public AnnonceChercheurEntity FindAnnonceChercheur(long id) {
		myannonce = m_EntityManager.find(AnnonceChercheurEntity.class, id);
		myannonce.setProprietaireEntityAC(findMesFans(id));
		return myannonce;
	}
}
